#define _USE_MATH_DEFINES

#include <cstdio>
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <map>
#include <set>
#include <queue>
#include <cassert>
#include <stack>
#include <cstdlib>
#include <bitset>
#include <cmath>

#define forn(i,n) for (int i = 0; i < int(n); ++i)
#define pb push_back
#define all(a) a.begin(),a.end()
#define sz(a) int(a.size())
#define mp make_pair

using namespace std;

typedef long long li;
typedef long double ld;

typedef pair<int,int> pt;
#define ft first
#define sc second

const int INF = int(1e9);
const li INF64 = li(1e18);
const ld EPS = 1e-9;

//#define TASK_NAME ""

const int N = 4005;

int n, to[N];
vector <int> g[N], gt[N], r[N];

bool read() {
	if (scanf("%d", &n) != 1) 
		return false;
	forn(i, n) {
		int k;
		scanf("%d", &k);
		g[i].resize(k);
		forn(j, k) {
			scanf("%d", &g[i][j]);
			--g[i][j];
			g[i][j] += n;
		}
	}

	forn(i, n) {
		scanf("%d", &to[i]);
		--to[i];
		to[i] += n;

		g[i].erase(find(all(g[i]), to[i]));
		g[to[i]].pb(i);
	}

	forn(i, n + n) {
		forn(j, sz(g[i])) {
			gt[ g[i][j] ].pb(i);
		}
	}
	return true;
}

int osz, csz;
int compid[N], order[N];
bool used[N];

void dfs(int v) {
	used[v] = true;
	forn(i, sz(g[v])) {
		int to = g[v][i];
		if (!used[to])
			dfs(to);
	}

	order[osz++] = v;
}

void dfs2(int v, int c) {
	compid[v] = c;
	forn(i, sz(gt[v])) {
		int to = gt[v][i];
		if (compid[to] == -1)
			dfs2(to, c);
	}
}

void solve() {
	memset(compid, -1, sizeof(compid));

	forn(i, n + n)
		if (!used[i])
			dfs(i);

	assert(osz == n + n);

	for (int t = osz - 1; t >= 0; --t) {
		int i = order[t];
		if (compid[i] == -1)
			dfs2(i, csz++);
	}

	forn(i, n) {
		r[i].pb(to[i] - n);
		forn(j, sz(g[i])) {
			int to = g[i][j];
			if (compid[to] == compid[i])
				r[i].pb(to - n);
		}
		sort(all(r[i]));

		printf("%d ", sz(r[i]));
		forn(j, sz(r[i]))
			printf("%d ", r[i][j] + 1);
		puts("");
	}
}

int main() {
#ifdef TASK_NAME
	freopen(TASK_NAME ".in", "r", stdin);
	freopen(TASK_NAME ".out", "w", stdout);
#endif

#ifdef _DEBUG
	freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
#endif

	while (read())
		solve();

	return 0;
}